go channels
how they can be used to synchronize goroutines to share resources in a safe, less error prone and fun way.
Channels are type safe message queues
A channel acts as a conduit
we need to know the type and state of the channel.
unbuffered channel
require both goroutines to be ready to make any exchange.
チャネルに手を突っ込んでるときは ロックされてる。(出し手、受け手、両方とも) 同期してる。
https://gyazo.com/c73d84fe592abd239bdda9c54f38e5ef
buffered channel
when the queue has buffer availability, the sends will not lock.
Receives will not lock when there is something to receive from the channel.
if the buffer is full or if there is nothing to receive, a buffered channel will behave very much like an unbuffered channel.
記事の下の方では、4人のバトンリレーを、unbuffered channelで実装した例がある。
ランナーは、次のランナーをgoroutine生成(用意につかせる処理)して、バトン(channel)に値を送る。生成された goroutineランナーは、バトン(channel)を受ける処理をして、バトンタッチ成立。それぞれ次に進む(走り終えたランナーは処理終了)。